import api from './api';

/**
 * 用户类型枚举
 */
export type UserType = 'jobseeker' | 'employer' | 'admin';

/**
 * 登录请求数据接口
 */
export interface LoginData {
  /** 用户邮箱地址 */
  email: string;
  /** 用户密码 */
  password: string;
  /** 可选的记住我标志 */
  rememberMe?: boolean;
  /** 用户类型：求职者、招聘方或管理员 */
  userType?: UserType;
}

/**
 * 注册请求数据接口
 */
export interface RegisterData {
  /** 用户邮箱地址 */
  email: string;
  /** 用户密码 */
  password: string;
  /** 用户姓名 */
  fullName: string;
  /** 用户手机号码 */
  phone: string;
  /** 用户类型：求职者或招聘方 */
  userType: UserType;
  
  // 招聘方相关字段
  /** 公司名称（招聘方使用） */
  companyName?: string;
  /** 公司类型（招聘方使用） */
  companyType?: string;
  /** 公司规模（招聘方使用） */
  companySize?: string;
  /** 公司地址（招聘方使用） */
  companyLocation?: string;
  /** 公司简介（招聘方使用） */
  companyDescription?: string;
  /** 公司网站（招聘方使用） */
  companyWebsite?: string;
  /** 联系人职位（招聘方使用） */
  contactPosition?: string;
  /** 营业执照文件ID（招聘方使用） */
  businessLicenseId?: string;
  /** 组织机构代码证文件ID（招聘方使用） */
  organizationCodeId?: string;
  /** 法人身份证件文件ID（招聘方使用） */
  legalIdCardId?: string;
  /** 认证状态（招聘方使用） */
  verificationStatus?: 'pending' | 'verified' | 'rejected';
  
  // 求职者相关字段
  /** 期望职位（求职者使用） */
  position?: string;
  /** 最高学历（求职者使用） */
  education?: string;
  /** 工作经验（求职者使用） */
  experience?: string;
  /** 技能特长（求职者使用） */
  skills?: string;
  /** 简历文件ID（求职者使用） */
  resumeId?: string;
}

/**
 * 用户基本信息接口
 */
export interface UserInfo {
  /** 用户ID */
  id: string;
  /** 用户邮箱 */
  email: string;
  /** 用户姓名 */
  fullName: string;
  /** 用户类型 */
  userType: UserType;
  /** 用户手机号码 */
  phone?: string;
  /** 创建时间 */
  createdAt: string;
}

/**
 * 登录响应接口
 */
export interface LoginResponse {
  /** 访问令牌 */
  token: string;
  /** 用户信息 */
  user: UserInfo;
}

/**
 * 用户服务对象，提供用户相关的API调用
 */
export const userService = {
  /**
   * 用户登录
   * @param data 登录数据
   * @returns 登录响应
   */
  login: async (data: LoginData): Promise<LoginResponse> => {
    const response = await api.post<LoginResponse>('/users/login', data);
    return response.data;
  },

  /**
   * 用户注册
   * @param data 注册数据
   * @returns 注册响应
   */
  register: async (data: RegisterData): Promise<{ success: boolean; message: string }> => {
    const response = await api.post<{ success: boolean; message: string }>('/users/register', data);
    return response.data;
  },

  /**
   * 获取用户个人资料
   * @returns 用户信息
   */
  getProfile: async (): Promise<UserInfo> => {
    const response = await api.get<UserInfo>('/users/profile');
    return response.data;
  },
};